IVSHMEM with standard shared memory

Use this method only when the KVMFR kernel module is unavailable. A standard shared-memory file cannot provide KVMFR’s DMA-BUF export, so the client must copy the frame before uploading it to the host GPU.

Add the following to your libvirt machine configuration inside the ‘devices’ section by running virsh edit <VM> where <VM> is the name of your virtual machine.

<shmem name='looking-glass'>
  <model type='ivshmem-plain'/>
  <size unit='M'>64</size>
</shmem>

Note

If you are using QEMU directly without libvirt the following arguments are required instead.

Add the following to the commands to your QEMU command line, adjusting the bus parameter to suit your particular configuration:

-device ivshmem-plain,memdev=ivshmem,bus=pcie.0 \
-object memory-backend-file,id=ivshmem,share=on,mem-path=/dev/shm/looking-glass,size=64M

The example uses 64 MiB. Replace it with the value from Determining memory when using a larger resolution.

Warning

Stop the VM before changing this size. You may need to remove the existing /dev/shm/looking-glass file so QEMU can recreate it at the new size. Check its permissions afterward; see Permissions.

Permissions

The shared memory file used by IVSHMEM is found in /dev/shm/looking-glass. By default, it is owned by QEMU, and does not give read/write permissions to your user, which are required for Looking Glass to run properly.

You can use systemd-tmpfiles to create the file before running your VM, granting the necessary permissions which allow Looking Glass to use the file properly.

Create a new file /etc/tmpfiles.d/10-looking-glass.conf, and populate it with the following:

# Type Path               Mode UID  GID Age Argument

f /dev/shm/looking-glass 0660 user kvm -

Change UID to the user name you will run Looking Glass with, usually your own.